--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / js / registries / postInstallPromptRegistry.js
Displaying Raw • Download
meshchatx/src/frontend/js/registries/postInstallPromptRegistry.js bce42bcdce0e7d2c6d78228e864a4cd1d974cc82 (bce42bcd) Text, 3.18 KB
T8b949e// SPDX-License-Identifier: 0BSD
Tff7b72import Tb4b4b4{ Te6edf3createRegistry Tb4b4b4} Tff7b72from Ta5d6ff"./registryCore.js"Tb4b4b4;
T8b949e/**
* @typedef {Object} PostInstallPromptEntry
* @property {string} id
* Stable prompt id. Do not rename casually.
* @property {number} revision
* Monotonic. Bump to re-prompt users who dismissed an older revision.
* @property {string} titleKey
* i18n key for the dialog title.
* @property {string} [descriptionKey]
* i18n key for the body text.
* @property {string} [primaryLabelKey]
* i18n key for the primary button. Defaults to common.continue.
* @property {string} [secondaryLabelKey]
* i18n key for the secondary button. Omit for primary-only.
* @property {number} [priority]
* Higher runs first among pending prompts. Default 0.
* @property {() => boolean | Promise<boolean>} [shouldShow]
* Extra gate after revision check. Return false to skip.
* @property {(ctx: { entry: PostInstallPromptEntry }) => boolean | void | Promise<boolean | void>} [onPrimary]
* Return false to keep the dialog open and skip dismiss.
* @property {(ctx: { entry: PostInstallPromptEntry }) => boolean | void | Promise<boolean | void>} [onSecondary]
* Return false to keep the dialog open and skip dismiss.
* @property {boolean} [dismissOnPrimary]
* Mark seen after a successful primary action. Default true.
* @property {boolean} [dismissOnSecondary]
* Mark seen after a successful secondary action. Default true.
*/
T8b949e/** @type {import('./registryCore.js').Registry<PostInstallPromptEntry>} */
Tff7b72export Tff7b72const Te6edf3postInstallPromptRegistry Tff7b72= Te6edf3createRegistryTb4b4b4(Ta5d6ff"postInstallPromptRegistry"Tb4b4b4)Tb4b4b4;
T8b949e/**
* @param {PostInstallPromptEntry} entry
*/
Tff7b72export Tff7b72function Te6edf3registerPostInstallPromptTb4b4b4(Te6edf3entryTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3entryTff7b72?Tb4b4b4.Te6edf3idTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"postInstallPromptRegistry: entry requires an id"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3revision Tff7b72= Tffa657NumberTb4b4b4(Te6edf3entryTb4b4b4.Te6edf3revisionTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3revisionTb4b4b4) Tff7b72|| Te6edf3revision Tff7b72< T79c0ff1Tb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Ta5d6ffpostInstallPromptRegistry: entry "Tffd700${Te6edf3entryTb4b4b4.Te6edf3idTffd700}Ta5d6ff" requires revision >= 1Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3entryTb4b4b4.Te6edf3titleKeyTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Ta5d6ffpostInstallPromptRegistry: entry "Tffd700${Te6edf3entryTb4b4b4.Te6edf3idTffd700}Ta5d6ff" requires titleKeyTa5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3postInstallPromptRegistryTb4b4b4.Te6edf3registerTb4b4b4(Tb4b4b4{
Tb4b4b4...Te6edf3entryTb4b4b4,
Te6edf3revisionTff7b72: Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3revisionTb4b4b4)Tb4b4b4,
Te6edf3priorityTff7b72: Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Tffa657NumberTb4b4b4(Te6edf3entryTb4b4b4.Te6edf3priorityTb4b4b4)Tb4b4b4) Tff7b72? Tffa657NumberTb4b4b4(Te6edf3entryTb4b4b4.Te6edf3priorityTb4b4b4) Tff7b72: T79c0ff0Tb4b4b4,
Te6edf3dismissOnPrimaryTff7b72: Te6edf3entryTb4b4b4.Te6edf3dismissOnPrimary Tff7b72!== Tff7b72falseTb4b4b4,
Te6edf3dismissOnSecondaryTff7b72: Te6edf3entryTb4b4b4.Te6edf3dismissOnSecondary Tff7b72!== Tff7b72falseTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {string} id
*/
Tff7b72export Tff7b72function Te6edf3unregisterPostInstallPromptTb4b4b4(Te6edf3idTb4b4b4) Tb4b4b4{
Te6edf3postInstallPromptRegistryTb4b4b4.Te6edf3unregisterTb4b4b4(Te6edf3idTb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @returns {PostInstallPromptEntry[]}
*/
Tff7b72export Tff7b72function Te6edf3listPostInstallPromptsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3postInstallPromptRegistryTb4b4b4.Te6edf3listTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* Highest priority first, then id for stability.
* @returns {PostInstallPromptEntry[]}
*/
Tff7b72export Tff7b72function Te6edf3listPostInstallPromptsByPriorityTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3listPostInstallPromptsTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3sliceTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3sortTb4b4b4(Tb4b4b4(Te6edf3aTb4b4b4, Te6edf3bTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3pa Tff7b72= Tffa657NumberTb4b4b4(Te6edf3aTb4b4b4.Te6edf3priorityTb4b4b4) Tff7b72|| T79c0ff0Tb4b4b4;
Tff7b72const Te6edf3pb Tff7b72= Tffa657NumberTb4b4b4(Te6edf3bTb4b4b4.Te6edf3priorityTb4b4b4) Tff7b72|| T79c0ff0Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3pb Tff7b72!== Te6edf3paTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3pb Tff7b72- Te6edf3paTb4b4b4;
Tb4b4b4}
Tff7b72return Tffa657StringTb4b4b4(Te6edf3aTb4b4b4.Te6edf3idTb4b4b4)Tb4b4b4.Te6edf3localeCompareTb4b4b4(Tffa657StringTb4b4b4(Te6edf3bTb4b4b4.Te6edf3idTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────